#! /usr/bin/env python
# -*- coding:utf-8 -*-
# Author Jmz
print(type(Exception)) # <class 'type'> 异常也是类


# 1 指定类型 异常处理
try:
    x
except NameError as e:
    print(e)



# 2 多异常处理 方式一
try:
    name = 'aa'
    name[3]
except IndexError as e:
    print(e)
except KeyError as e:
    print(e)

# 3 多异常处理 方式2
try:
    name = 'aa'
    name[3]
except (IndexError,KeyError) as e:   # 将多个不同类型的异常放在一起
    print(e)

# 4、万能异常

try:
    for i in 4:
        print(i)
except Exception as e:
    print(e)


# 5、try....else...  (else必须更在except 后面）
try:
    print('start ....')
    name = "jmz"
    print(name[2])
except Exception as e:
    print(e)
else:
    print('这个程序没有任何的错误')



# 6、try....finally

try:
    f = open('b.txt','w',encoding="utf-8")
    # 打开文件的过程：
    #   1、Python 调用操作系统的文件api接口
    #   2、操作系统放回文件对象（句柄）给Python     # 操作系统资源占一份
    #   3、python 将文件对象保存在软件内存中        # 运用程序资源占一份
    f.readline()   # 这是文件只能写操作，不能读，所以这里报错了，报错结束进程前，Python的回收机制会回收资源将运用程序资源回收
    f.close()
except Exception as e:
    print(e)
finally:
    f.close()    # 这一步其实就是为了能够将操作系统和运用程序的文件资源释放掉。finally 无论是否报错都一定会执行的
    print('我可不关你有没有异常')




